package com.cskaoyan.javase.oop1._1basic;

/**
 * 定义一个教师类
 * 1.类的成员的概念
 *      在一个类当中,无论是成员变量还是成员方法,要想使用它们
 *      都必须创建对象
 *      然后使用对象去访问它们
 *   所以成员变量和成员方法,都是属于对象的,因为必须创建对象才能够访问它们
 *   成员变量和成员方法统称为类的成员
 *
 * 2.关于类中成员变量的成员方法的定义顺序
 *      应该先开门见山的定义成员变量,然后再定义方法
 *
 * 3.类中没有的属性和行为，对象是不可能有的，类是模板，模板中有才能体现在对象中。
 *
 * 4.使用new关键字就会创建新的对象，两条new语句创建的对象是完全独立的。
 *
 * 5.直接输出对象名,对象名类似于数组名,它们都是引用
 *      引用中存的是堆上对象的地址
 *      对象是实质,但是只能通过引用间接的访问对象
 * 在默认情况下,打印对象的引用,会输出地址值
 *      但实际上这个打印的结果是可以随意修改的(这一点不同于数组)
 *
 *
 * 6.关于"全局变量",要看全局是哪个全局.
 *      成员变量不同于局部变量,从某种程度上来说,它确实是全局变量.
 *      成员变量在整个类的成员方法中,都是可以随意访问的,从这个角度上来说,它确实可以叫全局变量(但实际上它不全,所以不推荐这么叫,Java中没有全局变量的概念)
 *      但是在加了static修饰的非成员方法中,是无法直接访问成员变量的.(所以它称不上全局)
 *
 *
 * 7.不同的对象,它们往往在属性取值,方法调用上有不同的结果.
 * 排除大家的一个误解:
 *      不要认为不同对象,在调用成员方法时,也会有一样的结果.
 *
 *
 * @since 21:11
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo2 {
    public static void main(String[] args) {
        Teacher t = new Teacher();
        t.course = "JavaSE";
        System.out.println(t.course);
        t.teach();

        Teacher t2 = new Teacher();
        System.out.println(t == t2);

        /*
            com.cskaoyan.javase.oop1._1basic.Teacher@1540e19d
            com.cskaoyan.javase.oop1._1basic.Teacher 是包名 + 类名,是全限定类名
            @1540e19d 是堆上对象的地址值
         */
        System.out.println(t);
        System.out.println(t2);

        System.out.println("-----------------------");
        Teacher t3 = new Teacher();
        t3.course = "数据库";
        t3.salary = 88888888;
        t3.teach();
        t3.payWages();
    }
}

class Teacher {
    String name;
    double salary;
    String course;

    public void teach() {
        System.out.println("这个老师正在讲" + course + ",他讲的很开心!");
    }

    public void payWages() {
        System.out.println("明天发工资了,发了" + salary);
    }

    public static void test(){
        // name;
    }
}